# -*- coding: utf8-*- # Eksempler og informasjon for forelesninger om Programmering i MENA1000. # Velkommen! ********************************************************************** # Forelesning 1: Introduksjon, grunnleggende Python programmeringsferdigheter. # I denne forelesningen og i dette programmet skal vi l?re litt om det ? skrive, # sjekke og kj?re program, hvordan datamaskin og program virker og at datamaskinen # er veldig n?ye. Videre skal vi l?re om typer av variabler og lister, og se hvordan # vi kan regne med tall, sette sammen tekster til lengre tekster, og skrive ting # p? skjermen. # Dette er et program. # Det inneholder linjer med tekst, skrevet i spr?ket Python. # N?r det utf?res (eksekveres) vil Python oversette det til datamaskin-kommandoer. # Linjer som starter med # oversettes ikke - de er kommentarlinjer :-) # Python oversetter programmet linje for linje, til et komplett utf?rbart kommandosett. # Linjeskift fungerer derfor som slutten p? en kommando. # Videre m? du huske at oversetteren leser ord for ord skilt med opphold. # En kommando eller et navn p? en variabel eller funksjon m? derfor v?re ett ord. # Du kan bruke bindestrek, men bare underliggende (_), ikke normal (-). # Dersom det er noe oversetteren ikke kjenner igjen og derfor ikke klarer ? oversette, # f?r du en feilmelding: En Syntaksfeil. # Datamaskinen er en pedant! Den har nesten ingen toleranse for feil, og legger # sjelden godviljen til. Til gjengjeld kan du stole p? den: Den gj?r den det den er # programmert til hver eneste gang. # Neste linje er en programlinje (og flere linjer lenger ned er programlinjer): print "Hei!" # Linjen skriver Hei! p? skjermen i det vinduet du kj?rer Python fra. # Legg merke til at editoren ser vi skriver programmet markerer teksten med farger # n?r den kjenner igjen programkode. Fargene indikerer at koden er korrekt skrevet. # Sjekk syntaks p? dette programmet: (I IDLE g?r du til Run/Check Module (Alt-X).) # Du f?r ingen feilmelding. # Pr?v n? ? endre print til Print eller "Hei!" til "Hei!' i programlinjen. # Legg merke til at fargen forsvinner p? ordene. # N?r du n? sjekker programmet f?r du Syntax Error, og en mark?r viser hvor i programmet # oversetteren ga opp (og der feilen mest sannsynlig er). # Hvis du retter feilen og kj?rer programmet (Run, Run Module (F5)) vil det printe # Hei! i det vinduet der Python kj?rer (shell-vindu), samt en rekke etterf?lgende ting # som har med programlinjer lenger ned. # I programlinja over brukte vi den for Python kjente kommandoen print samt teksten "Hei!". # Par av " " eller ' ' brukes for ? identifisere s?kalte tekstvariabler. # Et par nyttige tips: ************************************************************ # Sjekk ut mulighetene i Editorens menyer! # Hvis editoren eller Python tilsynelatende g?r i st?, kan det v?re at programmet kj?rer, # men har g?tt inn i en evig l?kke eller venter p? input fra deg. # Hvis du er i Windows kan du da pr?ve ? klikke p? vinduet der Pyhon kj?rer (shell-vinduet) # og s? trykke Ctrl-C. # Hvis du bruker LINUX, pr?v Ctrl-D. # Eksempel p? et program. ***************************************************************** # Regne ut h?yden til en ball som funksjon av tiden etter oppkast med starthastighet v0: # y(t) = v0 * t - 1/2 * g * t^2 # Anta at v0 = 5. Vi regner ut h?yden ved t = 0.6: # Denne programlinja regner ut h?yden korrekt|: y = 5 * 0.6 - 1.0 / 2 * 9.81 * 0.6**2 print "Height = ", y, "m (correct)" # Men denne - tilsynelatende ekvivalente ligningen - gir feil svar: y = 5 * 0.6 - 1 / 2 * 9.81 * 0.6**2 print "Height = ", y, "m (this is wrong)" # Feilen er at siste del av utregningen antas ? skulle v?re et heltall av programmet, # fordi det starter med divisjon av to heltall. Det runder derfor ned til n?rmeste heltall. # Vi l?rer av dette at rekkef?lge p? operasjoner og definisjon av type er viktig! # Variabler: ****************************************************************************** # Variabler lagres i datamaskinens minne. Ved ? lagre en variabel kan den gjenbrukes. # Det finnes mange typer variabler - de krever forskjellig mengde plass. # I Python settes typen for en variabel - derved lagerplassen - ved f?rste gangs # tilordning av en verdi. # Initialisering, deklarering: ************************************************************ # Int, integer, heltall: Aarstall = 2009 Alder = 39 Ny_alder = Alder + 1 # float, flyttall, desimaltall...deklareres med (engelsk) komma: v0 = 5.0 t = 0.6 NA = 6.022E23 print 'Avogadros tall: ', NA # bool er en variabel som bare kan ha to verdier: True eller False. *********************** Test = False Gammel = True Dele_paa_null = False OK = True print Gammel, Dele_paa_null # Eksempler p? tilordning av verdi for boolske variable fra logiske evalueringer: Test = v0 == 4.0 Gammel = Alder >> 40 Gammel = Alder <= 40 print Test, Gammel # Tekststrenger: ************************************************************************* Fornavn = 'Ola' Etternavn = "Nordmann" #Tekststrenger kan settes sammen med +: Navn = Fornavn + ' ' + Etternavn print Navn # Bemerk: Baade ' ' og " " fungerer, men skal ikke blandes. # tuppel, tupler: *************************************************************************** # Tupler er en rekke av konstanter - kan v?re av forskjellig type: # Tilordning av verdier skjer med en parentes: Litt_forskjellig = ("Ball", "masse", 20.0, "kg", True) # Indeksering (p?kalling av bestemte elementer) med klammeparentes: Foerst = Litt_forskjellig[0] Tallet = Litt_forskjellig[2] print Litt_forskjellig[1:4] # Legg merke til at f?rste element er 0 og at et omr?de angis med f?rste brukte og siste ubrukte # (dvs. siste + 1) element. Print-kommandoen over skrev derfor ut "masse 20.0 kg"! # Tupler er nyttige til ? formatere utskrifter: # Tekststreng med formaterte variabler inni (se Python-hefte side 9), deretter % og s? tuppelen. masse = 20.0 print "%d baller veier %f kg. Det er tyngre enn en %s." % (2278, masse, "golfball") # I denne utskriften kommer det en lang tekst, men der %d, %f og %s erstattes med formaterte # variabler av typen heltall, flyttall og string (tekst). # De forventes ? komme i den rekkef?lge # de er angitt, og leveres i en tuppel som etterf?lger et &-tegn (se eksempelet). # Slik kan vi gi utskrifter et ryddig og forutsigbart utseende. Vi kan bruke et tall sammen # med %d, %f og %s for ? angi hvor mange plasser i ustskriften verdien skal bruke: print "%10d baller veier %10f kg. Det er tyngre enn en %10s." % (2278, masse, "golfball") # Vi skal senere bedre se nytten av dette. # List - lister: ****************************************************************************** # Som tuppel, men med variabelt innhold. # B?de tilordning og indeksering skjer med klammeparentes. En_liste = ["a", "b", "c", 4] Periode_3 = ["K", "Ca", "Ga", "Ge", "As", "Se", "Br", "Xe"] #Elementene kan i sin tur v?re lister med elementer (n?stet indeksering/nested indexing): Grunnstoffer = [["H", "He"],["Li", "Be", "B", "C", "N", "O", "F", "Ne"], ["K" ,"Ca", "Al", "Si", "P", "S", "Cl", "Ar"]] Grunnstoffer[2][0:2] = ["Na", "Mg"] # (Her overskriver vi to verdier for ? rette feil.) print "The first four elements are:", Grunnstoffer[0], Grunnstoffer[1][0:2] # Vi kan legge til og slette elementer med kommandoene liste.append og del liste: Grunnstoffer.append(Periode_3) print Grunnstoffer del Grunnstoffer[2] print Grunnstoffer # Dict ************************************************************************************** # Indekseres etter forskjellige typer variabler: grunnstoffvekt = {"H":1.00794, "He":4.002602, "Li": 6.941} print grunnstoffvekt["H"] # Legg til: grunnstoffvekt["Be"] = 9.012182 # slett: del grunnstoffvekt["H"] # None: Type som er et ikke-object. ******************************************************** # Casting; skifte type: ******************************************************************** var=1.0 Inn='123.4' # Eksempel: Flyttallsvariabelen var f?r flyttallsverdien av innholdet i stringvariabelen Inn: var=float(Inn) # Eksempel: Stringvariabelen Inn blir her omgjort til en flyttallsvariabel: Inn=float(Inn) print var, Inn